週刊Automatineマガジン 5. jsonとかデータからAutoを作る


概要

Automatineでは、GUIからいろいろ調整したTimelineとかをコードの形で出力することができる。


でもこれだと、変更を加えるたびにいちいちコンパイルしないといけない、、オラそんなのいやだ、、、


というわけで、AutomatineをGUIで弄る -> jsonデータを吐く -> jsonデータを実行時に読み込む -> 実行 ということができる。

すでにリリースしちゃったゲームの調整すらできるというわけさ。



データ出力手順

GUIの一番右上の「Export As Data」ボタンを押す。

スクリーンショット 2016-02-15 22.20.45.png


すると、すべてのAutoのデータがjsonとして

Assets/Automatine/Runtime/Generated/Json フォルダに出力される。

スクリーンショット 2016-02-15 22.23.36.png

拡張子は.jsonになっているため、Assetsフォルダの下だけれど、Unityの影響は受けない。

これらをサーバなどに置いて、動的にDLしてAutoとして使用することができる。



使用方法

次のようなAutoを使うコードがあったら、

Auto<int, int> auto = new Atk_Punch<int, int>(frame, 100);


次のように書き換えることができる。


var atk_punchJson = //通信結果やファイル読み出しなどで得たAtk_Punch.jsonの中身

var atk_punchData = AutomatineJsonConverter.JsonToAutoData(atk_punchJson);

Auto<int, int> auto = Auto<int, int>.RuntimeAutoGenerator(atk_punchData)(frame, 100);

これで、Atk_Punch.jsonに入っているAutoの情報を、特定の内容のAutoとして初期化することができる。


初期化コストは無視できるくらい小さい。

(クラスとして持っている場合と負荷を比較したら、もちろんjsonからの変形のほうが負荷が大きいとは思うけれど。)



制約

この機能によって、jsonを介して、動的にAutoを生成することができる。 いちいちコンパイルし直さないでも、どこかから最新のAutoの情報を取得して~っていうのが、実機でできたりする。

素敵。



ただし制約がある。

なんのことはない、「すでに動いているゲームに対して、動的にコードを追加することはできない」ことに起因する制約がある。


1.ConditionType, ConditionValueを動的に増やすことはできない

2.Coroutineを動的に増やすことはできない

3.Changerを動的に増やすことはできない


Autoの中にあるTackを移動したり、TackにセットしてあるConditionやCoroutineを切り替えたり、タイミングや長さ、Timelineの数などを変更することは自由自在にできる。


ただし、使用される対象であるCoroutineやChanger、ConditionType、ConditionValueについては、これらはデータではなくコードなので、動的に追加することはできない。

これらはコンパイル時に「あらかじめ」いれておこうね、っていう話になる。



まーーーUnityそれ自体の制約でもあるし、iOSとかのプラットフォームの制約でもあるし。